home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Turnbull China Bikeride
/
Turnbull China Bikeride - Disc 2.iso
/
STUTTGART
/
HARDWARE
/
IICALARM
/
!iicAlarm
/
IIC-Bus
< prev
next >
Wrap
Text File
|
1994-04-26
|
7KB
|
165 lines
IIC-Bus im Archimedes
---------------------
# Der IIC-Bus (Internal IC-Bus) ist ein serieller Bus, über welchen mehrere
IC's vernetzt werden können. Sie benötigen nur 3 Leitungen:
Masse, Data-Clock und Data.
# Die Clock und Datenleitung sind als Open Collector ausgelegt und dadurch
Bi-Direktional und vernetzbar.
# Taktraten für IIC-Bausteine liegen bei 2kHz, typische Bausteine können
jedoch bis 100kHz getacktet werden.
# Das Protokoll der Kommunikation besteht aus:
+ Start-Marke
+ Baustein-Adresse
+ Read/Write-Signal
+ Acknowledge vom Slave
+ Word-Adresse im Slave
+ Daten-Worte
+ Stop-Marke
# 3 verschiedene Protokolle:
a) WRITE-MODE
: Start-Marke
: Baustein-Adresse (Slave address) und Write-Mode (=0)
: Acknowledge vom Slave
: Wort-Adresse im angewählten Baustein, nur im Write-Mode möglich !
: Acknowledge vom Slave
: Daten zum Slave
: Acknowledge vom Slave, Slaveinterne Adresse wird automatisch erhöht.
: weitere Daten mit Acknowledge.....
: Stop-Marke
.-.--------------.-.-.--------------.-.--------------.-.-.
|S|Slave address 0|A| Word address |A| Data |A|P|
'-'--------------'-'-'--------------'-'--------------'-'-'
\__8 Bit-word__/ \_8 Bit-word_/ \_8 Bit-word_/
0=Read, 1=Write " \___Loop of n____/
b) WRITE word address; READ data
: Start-Marke
: Baustein-Adresse (Slave address) und Write-Mode (=0)
: Acknowledge vom Slave
: Wort-Adresse im angewählten Baustein, nur im Write-Mode möglich !
: Acknowledge vom Slave
: Start-Marke
: Baustein-Adresse (Slave address) und Read-Mode (=1)
: Acknowledge vom Slave; Slave wird Slave-Transmitter.
: Daten vom Slave
: Acknowledge vom Master, Slaveinterne Adresse wird automatisch erhöht.
: weitere Daten mit Acknowledge.....
: nach dem letzten Datenbyte schickt Master eine "1" statt Acknowledge.
: Stop-Marke
.-.--------------.-.-.--------------.-.
|S|Slave address 0|A| Word address |A|
'-'--------------'-'-'--------------'-'
\__8 Bit-word__/ \_8 Bit-word_/
0=Read, 1=Write "
.-.--------------.-.-.--------------.-. .--------------.-.-.
|S|Slave address 1|A| Data |A|.......| Data |1|P|
'-'--------------'-'-'--------------'-' '--------------'-'-'
\__8 Bit-word__/ \_8 Bit-word_/
0=Read, 1=Write " \___Loop of n____/ .... last Byte......|
c) Direct Read
: Start-Marke
: Baustein-Adresse (Slave address) und Read-Mode (=1)
: Acknowledge vom Slave
: Daten vom Slave
: Acknowledge vom Master, Slaveinterne Adresse wird automatisch erhöht.
: weitere Daten mit Acknowledge.....
: nach dem letzten Datenbyte schickt Master eine "1" statt Acknowledge.
: Stop-Marke
.-.--------------.-.-.--------------.-. .--------------.-.-.
|S|Slave address 1|A| Data |A|.......| Data |1|P|
'-'--------------'-'-'--------------'-' '--------------'-'-'
\__8 Bit-word__/ \_8 Bit-word_/
0=Read, 1=Write " \___Loop of n____/ .... last Byte......|
# Slave address ist eine Bauteile-Kennung zur Identifizierung eines IC's.
Sie wird im Bauteil festgelegt.
Bei einigen Bausteinen kann durch eine Adress-Leitung diese Kennung
verändert werden.
# Word address ist eine Bauteilinterne 8 Bit Adresse über welche die
gewünschte Funktion abgerufen werden kann.
# Archimedes IC's:
+ PCF8583, RAM, Uhr, Kalender und Alarmgeber. Verwendbar als Eventzähler.
Slave address: .---.---.---.---.---.---.---.---.
| 1 | 0 | 1 | 0 | 0 | 0 |A0 |R/W|
'---'---'---'---'---'---'---'---'
+ PCF8573, Uhr, Kalender und Alarmgeber. Verwendbar als Eventzähler.
Slave address: .---.---.---.---.---.---.---.---.
| 1 | 1 | 0 | 1 | 0 |A1 |A0 |R/W|
'---'---'---'---'---'---'---'---'
# Archimedes Routinen für den Zugriff auf diese Bausteine:
+ Zur Unterstützung des Uhrenbausteins gibt es diverse Funktionen, um die
Zeit oder den Ram zu lesen und zu schreiben.
. OS_Word 14,1 -- Uhr lesen, PRM.562
. OS_Word 15,8 -- Zeit schreiben, PRM.566
. OS_Word 15,15 -- Datum schreiben, PRM.567
. OS_Word 15,24 -- Uhr schreiben, PRM.569
. OS_Byte 161 -- Read CMOS RAM, PRM.787
. OS_Byte 162 -- Write CMOS RAM, PRM.788
Mit den Ram-Funktionen ist es nicht möglich alle 256 Adressen zu
bearbeiten. Die Daten der Uhr (16 Bytes) sind nicht direkt erreichbar.
+ Zur Unterstützung allgemeiner IIC-Bausteine gibt es eine Funktion die
die Kommunikation problemlos übernimmt.
. IIC_Control -- bearbeiten von IIC-Devices, PRM.824
Diese Funktion ist schlecht erklärt und sogar mit einem Druckfehler
behaftet. Das Read/Write-Signal ist genau umgekehrt.
Sie übernimmt die komplette Kommunikation.
Man muß lediglich beachten, daß beim schreiben die erste Date als
Bauteil-interne Adresse interpretiert wird. Das Stop-Bit wird nie
gesendet. Anwählen einer bestimmten Adresse ist also möglich durch
schreiben eines Blockes der Länge 1. Der interne Adresszähler im
Baustein zählt ja nach jedem Zugriff um eins aufwärts.
Siehe auch die Protokoll-Diagramme weiter oben.
# Das Mapping der CMOS-Ram-Funktion weicht von der Hardware ab.
Die Routine "PROCiicMAP" in IICTest stellt eine Adresstabelle auf
und gibt sie mit der RAM-lese-Funktion aus.
d.h. Wir beschreiben jedes Byte mit seiner Adresse
Wir lesen mit der normalen CMosRamleseRoutine:
0: 40 41 42 43 44 45 46 47 48 49 4A 4B 4C 4D 4E 4F
10: 50 51 52 53 54 55 56 57 58 59 5A 5B 5C 5D 5E 5F
20: 60 61 62 63 64 65 66 67 68 69 6A 6B 6C 6D 6E 6F
30: 70 71 72 73 74 75 76 77 78 79 7A 7B 7C 7D 7E 7F
40: 80 81 82 83 84 85 86 87 88 89 8A 8B 8C 8D 8E 8F
50: 90 91 92 93 94 95 96 97 98 99 9A 9B 9C 9D 9E 9F
60: A0 A1 A2 A3 A4 A5 A6 A7 A8 A9 AA AB AC AD AE AF
70: B0 B1 B2 B3 B4 B5 B6 B7 B8 B9 BA BB BC BD BE BF
80: C0 C1 C2 C3 C4 C5 C6 C7 C8 C9 CA CB CC CD CE CF
90: D0 D1 D2 D3 D4 D5 D6 D7 D8 D9 DA DB DC DD DE DF
A0: E0 E1 E2 E3 E4 E5 E6 E7 E8 E9 EA EB EC ED EE EF
B0: F0 F1 F2 F3 F4 F5 F6 F7 F8 F9 FA FB FC FD FE FF
C0: 10 11 12 13 14 15 16 17 18 19 1A 1B 1C 1D 1E 1F
D0: 20 21 22 23 24 25 26 27 28 29 2A 2B 2C 2D 2E 2F
E0: 30 31 32 33 34 35 36 37 38 39 3A 3B 3C 3D 3E 3F
F0: 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 <-- Uhr
Jetzt lesen wir mit der IIC-Block-Routine:
0: 0 1 2 3 4 5 6 7 8 9 A B C D E F <-- Uhr
10: 10 11 12 13 14 15 16 17 18 19 1A 1B 1C 1D 1E 1F
20: 20 21 22 23 24 25 26 27 28 29 2A 2B 2C 2D 2E 2F
30: 30 31 32 33 34 35 36 37 38 39 3A 3B 3C 3D 3E 3F
40: 40 41 42 43 44 45 46 47 48 49 4A 4B 4C 4D 4E 4F
50: 50 51 52 53 54 55 56 57 58 59 5A 5B 5C 5D 5E 5F
60: 60 61 62 63 64 65 66 67 68 69 6A 6B 6C 6D 6E 6F
70: 70 71 72 73 74 75 76 77 78 79 7A 7B 7C 7D 7E 7F
80: 80 81 82 83 84 85 86 87 88 89 8A 8B 8C 8D 8E 8F
90: 90 91 92 93 94 95 96 97 98 99 9A 9B 9C 9D 9E 9F
A0: A0 A1 A2 A3 A4 A5 A6 A7 A8 A9 AA AB AC AD AE AF
B0: B0 B1 B2 B3 B4 B5 B6 B7 B8 B9 BA BB BC BD BE BF
C0: C0 C1 C2 C3 C4 C5 C6 C7 C8 C9 CA CB CC CD CE CF
D0: D0 D1 D2 D3 D4 D5 D6 D7 D8 D9 DA DB DC DD DE DF
E0: E0 E1 E2 E3 E4 E5 E6 E7 E8 E9 EA EB EC ED EE EF
F0: F0 F1 F2 F3 F4 F5 F6 F7 F8 F9 FA FB FC FD FE FF
Der IIC-Block ist das "Original" mit einer linearen Adressierbarkeit
über 256 Adressen.